package dados;

import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JOptionPane;
import negocios.Familia;
import negocios.Unidade;

public class ConectaBDUnidades {

	private Connection conexao;
	
	public ConectaBDUnidades() throws SQLException, ClassNotFoundException {
		
		this.conexao = ConectaBD.getConectacao();
		
	}
	
	public Object[] listarUnidades() {

        Object[] und = null;

        try {

            PreparedStatement pst1 = conexao.prepareStatement("SELECT IUNIDADCODI, VUNIDADDESC, VUNIDADABRE FROM tbunidade ORDER BY IUNIDADCODI");
            PreparedStatement pst2 = conexao.prepareStatement("SELECT COUNT(*) as RESULT FROM tbunidade");

            ResultSet rs1 = pst1.executeQuery();
            ResultSet rs2 = pst2.executeQuery();

            rs2.next();
            und = new Unidade[rs2.getInt("RESULT")];

            for(int cont = 0; cont < und.length; cont++) {

                rs1.next();
                und[cont] = new Unidade(rs1.getInt(1), rs1.getString(2), rs1.getString(3));

            }

            return und;

        } catch(SQLException e) {

            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da consulta", JOptionPane.ERROR_MESSAGE);

        }

		return und;
		
	}
	
	public Unidade consultarUnidade(Unidade unidade) {
		
        try {

            PreparedStatement pst = conexao.prepareStatement("SELECT IUNIDADCODI, VUNIDADDESC, VUNIDADABRE FROM tbunidade WHERE IUNIDADCODI = ?");

            pst.setInt(1, unidade.getCodigo());

            ResultSet rs = pst.executeQuery();

            if(rs.next()) {

                Unidade und = new Unidade(rs.getInt(1), rs.getString(2), rs.getString(3));

                pst.close();

                rs.close();

                conexao.close();

                return und;

            }


        } catch(SQLException e) {

            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da consulta", JOptionPane.ERROR_MESSAGE);

        } catch(NumberFormatException e) {

            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da consulta", JOptionPane.ERROR_MESSAGE);

        }

        return null;
		
	}
	
	public void inserirUnidade(Unidade unidade) {
		

		try {

            PreparedStatement pst = conexao.prepareStatement("INSERT INTO tbunidade (VUNIDADDESC, VUNIDADABRE) VALUES (?, ?)");

            pst.setString(1, unidade.getDescricao());
            pst.setString(2, unidade.getAbreviacao());

            pst.executeUpdate();
            pst.close();

            conexao.close();

        } catch(SQLException e) {

            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da inserção", JOptionPane.ERROR_MESSAGE);

        }
		
	}
	
	public void editarUnidade(Unidade unidade) {
		
		if(this.consultarUnidade(unidade) != null) {

            try {

                this.conexao = ConectaBD.getConectacao();

                PreparedStatement pst = conexao.prepareStatement("UPDATE tbunidade SET VUNIDADDESC = ?, VUNIDADABRE = ? WHERE IUNIDADCODI = ?");

                pst.setString(1, unidade.getDescricao());
                pst.setString(2, unidade.getAbreviacao());
                pst.setInt(3, unidade.getCodigo());

                pst.executeUpdate();
                pst.close();

                conexao.close();

            } catch(SQLException e) {

                JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da edição", JOptionPane.ERROR_MESSAGE);

            }

        }
		
	}
	
	public void excluirUnidade(Unidade unidade) {
		
		if(this.consultarUnidade(unidade) != null) {

            try {

                this.conexao = ConectaBD.getConectacao();

                PreparedStatement pst = conexao.prepareStatement("DELETE FROM tbunidade WHERE IUNIDADCODI = ?");

                pst.setInt(1, unidade.getCodigo());

                pst.executeUpdate();
                pst.close();

                conexao.close();

            } catch(SQLException e) {

                JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da remoção", JOptionPane.ERROR_MESSAGE);

            }

        }
		
	}
	
}
